/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.form;
import java.beans.*;
import java.util.Vector;
import java.util.Enumeration;
import javax.swing.tree.*;
import javax.swing.event.*;
import org.openide.NotifyDescriptor;
import org.openide.TopManager;
import org.openide.util.HelpCtx;
import org.openide.util.Utilities;
/* Form Note:
* the source in guarded section has been changes without updating the .form file:
* - usage of advancedButton was commented out
*/
/** The ConnectionWizard is a dialog which allows to enter the data for connecting two
* components on a form.
*
* @author Ian Formanek
*/
public class ConnectionWizard1 extends javax.swing.JDialog {
public static final int CANCEL = 0;
public static final int NEXT = 1;
static final long serialVersionUID =7975448220626617288L;
/** Initializes the Form */
public ConnectionWizard1(RADComponent source) {
super (TopManager.getDefault ().getWindowManager ().getMainWindow (), true);
sourceComponent = source;
initComponents ();
eventNameCombo.addActionListener(new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent e) {
updateButtons ();
}
}
);
eventNameCombo.getEditor().addActionListener(new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent e) {
updateButtons ();
}
}
);
setDefaultCloseOperation (javax.swing.JDialog.DO_NOTHING_ON_CLOSE);
addWindowListener (new java.awt.event.WindowAdapter () {
public void windowClosing (java.awt.event.WindowEvent evt) {
cancelDialog ();
}
}
);
// attach cancel also to Escape key
getRootPane().registerKeyboardAction(
new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelDialog ();
}
},
javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0, true),
javax.swing.JComponent.WHEN_IN_FOCUSED_WINDOW
);
sourceComponentName.setText (source.getName ());
// populate event tree
final Vector eventNodes = new Vector ();
TreeNode rootNode = new TreeNode () {
public TreeNode getChildAt(int childIndex) {
return (TreeNode) eventNodes.elementAt (childIndex);
}
public int getChildCount() {
return eventNodes.size ();
}
public TreeNode getParent() {
return null;
}
public int getIndex(TreeNode node) {
return eventNodes.indexOf (node);
}
public boolean getAllowsChildren() {
return true;
}
public boolean isLeaf() {
return false;
}
public Enumeration children() {
return eventNodes.elements ();
}
};
EventsList.EventSet[] setHandlers = source.getEventsList ().getEventSets ();
for (int i = 0; i < setHandlers.length; i++) {
EventsList.Event[] events = setHandlers[i].getEvents();
Vector eventsVector = new Vector ();
EventSetNode esn = new EventSetNode (rootNode, setHandlers[i], eventsVector);
for (int j = 0; j < events.length; j++) {
eventsVector.addElement (new EventNode (esn, events[j]));
}
eventNodes.addElement (esn);
}
DefaultTreeSelectionModel treeSelectionModel = new DefaultTreeSelectionModel ();
treeSelectionModel.addTreeSelectionListener (
new TreeSelectionListener () {
public void valueChanged (TreeSelectionEvent evt) {
TreePath[] paths = eventSelectTree.getSelectionPaths ();
if ((paths != null) && (paths.length == 1)) {
TreeNode node = (TreeNode) paths[0].getLastPathComponent ();
if ((node != null) && (node instanceof EventNode)) {
setSelectedEvent (((EventNode)node).getEvent ());
return;
}
}
setSelectedEvent (null);
}
}
);
treeSelectionModel.setSelectionMode (DefaultTreeSelectionModel.SINGLE_TREE_SELECTION);
eventSelectTree.setModel (new DefaultTreeModel (rootNode));
eventSelectTree.setSelectionModel (treeSelectionModel);
// localization code
setTitle (FormEditor.getFormBundle ().getString ("CTL_CW_Step1_Title")); //"Connection Wizard - Step 1 of 3");
insidePanel.setBorder (new javax.swing.border.EmptyBorder (new java.awt.Insets(8, 8, 3, 8)));
buttonsPanel.setBorder (new javax.swing.border.EmptyBorder (new java.awt.Insets(0, 5, 5, 5)));
sourcePanel.setBorder (new javax.swing.border.CompoundBorder (
new javax.swing.border.EmptyBorder (new java.awt.Insets(0, 0, 8, 0)),
new javax.swing.border.CompoundBorder (
new javax.swing.border.TitledBorder (
new javax.swing.border.EtchedBorder (), FormEditor.getFormBundle ().getString ("CTL_CW_ConnectionSource")), // "Connection Source"),
new javax.swing.border.EmptyBorder (new java.awt.Insets(5, 5, 5, 5)))));
sourceNameLabel.setText (FormEditor.getFormBundle ().getString ("CTL_CW_SourceComponent")); // "Source Component:");
eventSelectLabel.setText (FormEditor.getFormBundle ().getString ("CTL_CW_Event")); // "Event:");
eventHandlerPanel.setBorder (new javax.swing.border.CompoundBorder (
new javax.swing.border.EmptyBorder (new java.awt.Insets(0, 0, 8, 0)),
new javax.swing.border.CompoundBorder (
new javax.swing.border.TitledBorder (
new javax.swing.border.EtchedBorder (), FormEditor.getFormBundle ().getString ("CTL_CW_EventHandlerMethod")), //"Event Handler Method"),
new javax.swing.border.EmptyBorder (new java.awt.Insets(5, 5, 5, 5)))));
eventNameLabel.setText (FormEditor.getFormBundle ().getString ("CTL_CW_MethodName")); // "Method Name:");
// advancedButton.setText (FormEditor.getFormBundle ().getString ("CTL_CW_Advanced")); // "Advanced");
nextButton.setText (FormEditor.getFormBundle ().getString ("CTL_NEXT")); // "Next >"
cancelButton.setText (FormEditor.getFormBundle ().getString ("CTL_CANCEL")); //"Cancel"
updateButtons ();
pack ();
org.openidex.util.Utilities2.centerWindow (this);
HelpCtx.setHelpIDString (getRootPane (), ConnectionWizard1.class.getName ());
}
public java.awt.Dimension getPreferredSize () {
java.awt.Dimension pref = super.getPreferredSize ();
return new java.awt.Dimension (Math.max (pref.width, 350), Math.max (pref.height, 500));
}
String getEventName () {
return (String) eventNameCombo.getEditor().getItem();
}
EventsList.Event getSelectedEvent () {
return selectedEvent;
}
int getReturnStatus () {
return returnStatus;
}
// ----------------------------------------------------------------------------
// private methods
private void updateButtons () {
// second enable/disable next buton according to whether all
// required fields are filled
String text = (String) eventNameCombo.getEditor ().getItem();
if ((getSelectedEvent () != null) &&
(
(
(!"".equals (text)) && // NOI18N
(org.openide.util.Utilities.isJavaIdentifier (text))
) ||
(getSelectedEvent ().getHandlers ().size () > 0))) {
nextButton.setEnabled (true);
} else {
nextButton.setEnabled (false);
}
}
private void setSelectedEvent (EventsList.Event event) {
selectedEvent = event;
if (selectedEvent != null) {
// restore non-modified if the input line is empty
if ("".equals ((String) eventNameCombo.getEditor().getItem()) && eventNameModified) // NOI18N
eventNameModified = false;
if (selectedEvent.getHandlers ().size () > 0) {
if (eventNameModified)
storedEventName = (String) eventNameCombo.getEditor().getItem();
eventNameCombo.removeAllItems();
for (java.util.Iterator iter = selectedEvent.getHandlers ().iterator (); iter.hasNext();) {
EventsManager.EventHandler eh = (EventsManager.EventHandler) iter.next();
eventNameCombo.addItem(eh.getName ());
}
eventNameCombo.setEnabled(true); // can add events
} else {
eventNameCombo.setEnabled(true);
if (storedEventName != null) {
eventNameCombo.removeAllItems();
eventNameCombo.addItem (storedEventName);
storedEventName = null;
eventNameModified = true;
} else {
if (!eventNameModified) {
eventNameCombo.removeAllItems();
eventNameCombo.addItem (FormUtils.getDefaultEventName (sourceComponent, selectedEvent.getListenerMethod ()));
}
}
}
}
updateButtons ();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents () {//GEN-BEGIN:initComponents
insidePanel = new javax.swing.JPanel ();
sourcePanel = new javax.swing.JPanel ();
sourceInfoPanel = new javax.swing.JPanel ();
sourceNamePanel = new javax.swing.JPanel ();
sourceNameLabel = new javax.swing.JLabel ();
sourceComponentName = new javax.swing.JLabel ();
eventSelectLabelPanel = new javax.swing.JPanel ();
eventSelectLabel = new javax.swing.JLabel ();
eventSelectScroll = new javax.swing.JScrollPane ();
eventSelectTree = new javax.swing.JTree ();
eventHandlerPanel = new javax.swing.JPanel ();
eventNameLabel = new javax.swing.JLabel ();
eventNameCombo = new javax.swing.JComboBox ();
buttonsPanel = new javax.swing.JPanel ();
rightButtonsPanel = new javax.swing.JPanel ();
nextButton = new javax.swing.JButton ();
cancelButton = new javax.swing.JButton ();
insidePanel.setLayout (new java.awt.GridBagLayout ());
java.awt.GridBagConstraints gridBagConstraints1;
sourcePanel.setLayout (new java.awt.BorderLayout ());
sourceInfoPanel.setLayout (new java.awt.GridLayout (2, 1));
sourceNamePanel.setLayout (new java.awt.FlowLayout (0, 5, 0));
sourceNameLabel.setText (FormEditor.getFormBundle ().getString ("CTL_CW_SourceComponent"));
sourceNamePanel.add (sourceNameLabel);
sourceNamePanel.add (sourceComponentName);
sourceInfoPanel.add (sourceNamePanel);
eventSelectLabelPanel.setLayout (new java.awt.FlowLayout (0, 5, 5));
eventSelectLabel.setText (FormEditor.getFormBundle ().getString ("CTL_CW_Event"));
eventSelectLabelPanel.add (eventSelectLabel);
sourceInfoPanel.add (eventSelectLabelPanel);
sourcePanel.add (sourceInfoPanel, java.awt.BorderLayout.NORTH);
eventSelectScroll.setMaximumSize (new java.awt.Dimension(32767, 100));
eventSelectTree.setShowsRootHandles (true);
eventSelectTree.setRootVisible (false);
eventSelectScroll.setViewportView (eventSelectTree);
sourcePanel.add (eventSelectScroll, java.awt.BorderLayout.CENTER);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.gridwidth = 0;
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.weightx = 1.0;
gridBagConstraints1.weighty = 0.5;
insidePanel.add (sourcePanel, gridBagConstraints1);
eventHandlerPanel.setLayout (new java.awt.BorderLayout (8, 0));
eventNameLabel.setText (FormEditor.getFormBundle ().getString ("CTL_CW_MethodName"));
eventHandlerPanel.add (eventNameLabel, java.awt.BorderLayout.WEST);
eventNameCombo.setEditable (true);
eventHandlerPanel.add (eventNameCombo, java.awt.BorderLayout.CENTER);
gridBagConstraints1 = new java.awt.GridBagConstraints ();
gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints1.weightx = 1.0;
insidePanel.add (eventHandlerPanel, gridBagConstraints1);
getContentPane ().add (insidePanel, java.awt.BorderLayout.CENTER);
buttonsPanel.setLayout (new java.awt.BorderLayout ());
rightButtonsPanel.setLayout (new java.awt.FlowLayout (2, 5, 5));
nextButton.setText (FormEditor.getFormBundle ().getString ("CTL_NEXT"));
nextButton.setEnabled (false);
nextButton.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
nextButtonActionPerformed (evt);
}
}
);
rightButtonsPanel.add (nextButton);
cancelButton.setText (FormEditor.getFormBundle ().getString ("CTL_CANCEL"));
cancelButton.addActionListener (new java.awt.event.ActionListener () {
public void actionPerformed (java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed (evt);
}
}
);
rightButtonsPanel.add (cancelButton);
buttonsPanel.add (rightButtonsPanel, java.awt.BorderLayout.EAST);
getContentPane ().add (buttonsPanel, java.awt.BorderLayout.SOUTH);
}//GEN-END:initComponents
private void nextButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextButtonActionPerformed
if (getSelectedEvent ().getHandlers ().size () > 0) {
if (TopManager.getDefault().notify(
new NotifyDescriptor.Confirmation(FormEditor.getFormBundle().getString("MSG_RewritingEvent"),
NotifyDescriptor.OK_CANCEL_OPTION,
NotifyDescriptor.WARNING_MESSAGE)
) == NotifyDescriptor.CANCEL_OPTION)
return;
}
returnStatus = NEXT;
setVisible (false);
}//GEN-LAST:event_nextButtonActionPerformed
private void cancelButtonActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
cancelDialog ();
}//GEN-LAST:event_cancelButtonActionPerformed
private void eventNamePressed (java.awt.event.KeyEvent evt) {//GEN-FIRST:event_eventNamePressed
eventNameModified = true;
}//GEN-LAST:event_eventNamePressed
/** Closes the dialog */
private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:closeDialog
cancelDialog ();
}//GEN-LAST:closeDialog
private void cancelDialog () {
returnStatus = CANCEL;
setVisible (false);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel insidePanel;
private javax.swing.JPanel sourcePanel;
private javax.swing.JPanel sourceInfoPanel;
private javax.swing.JPanel sourceNamePanel;
private javax.swing.JLabel sourceNameLabel;
private javax.swing.JLabel sourceComponentName;
private javax.swing.JPanel eventSelectLabelPanel;
private javax.swing.JLabel eventSelectLabel;
private javax.swing.JScrollPane eventSelectScroll;
private javax.swing.JTree eventSelectTree;
private javax.swing.JPanel eventHandlerPanel;
private javax.swing.JLabel eventNameLabel;
private javax.swing.JComboBox eventNameCombo;
private javax.swing.JPanel buttonsPanel;
private javax.swing.JPanel rightButtonsPanel;
private javax.swing.JButton nextButton;
private javax.swing.JButton cancelButton;
// End of variables declaration//GEN-END:variables
// ----------------------------------------------------------------------------
// Innerclasses
class EventSetNode implements TreeNode {
private TreeNode parent;
private EventsList.EventSet eventSet;
private Vector subNodes;
public EventSetNode (TreeNode parent, EventsList.EventSet eventSet, Vector subNodes) {
this.parent = parent;
this.eventSet = eventSet;
this.subNodes = subNodes;
}
public TreeNode getChildAt(int childIndex) {
return (TreeNode) subNodes.elementAt (childIndex);
}
public int getChildCount() {
return subNodes.size ();
}
public TreeNode getParent() {
return null;
}
public int getIndex(TreeNode node) {
return subNodes.indexOf (node);
}
public boolean getAllowsChildren() {
return true;
}
public boolean isLeaf() {
return false;
}
public Enumeration children() {
return subNodes.elements ();
}
public String toString () {
return eventSet.getName ();
}
}
class EventNode implements TreeNode {
private TreeNode parent;
private EventsList.Event event;
public EventNode (TreeNode parent, EventsList.Event event) {
this.parent = parent;
this.event = event;
}
public TreeNode getChildAt(int childIndex) {
return null;
}
public int getChildCount() {
return 0;
}
public TreeNode getParent() {
return parent;
}
public int getIndex(TreeNode node) {
return -1;
}
public boolean getAllowsChildren() {
return false;
}
public boolean isLeaf() {
return true;
}
public Enumeration children() {
return null;
}
public String toString () {
if (event.getHandlers ().size () == 0) return event.getName ();
if (event.getHandlers ().size () == 1) return event.getName () + " ["+((EventsManager.EventHandler) event.getHandlers ().get (0)).getName ()+"]"; // NOI18N
return event.getName () + " [...]"; // NOI18N
}
EventsList.Event getEvent () {
return event;
}
}
private String storedEventName = null; // used to preserve modified event name
private boolean eventNameModified = false;
private EventsList.Event selectedEvent = null;
private RADComponent sourceComponent;
private int returnStatus = CANCEL;
}
/*
* Log
* 16 Gandalf 1.15 1/12/00 Pavel Buzek I18N
* 15 Gandalf 1.14 1/10/00 Ian Formanek Finally removed Advanced
* button, form converted to XML
* 14 Gandalf 1.13 1/5/00 Ian Formanek NOI18N
* 13 Gandalf 1.12 11/26/99 Pavel Buzek
* 12 Gandalf 1.11 11/25/99 Ian Formanek Uses Utilities module
* 11 Gandalf 1.10 11/25/99 Pavel Buzek support for multiple
* handlers for one event
* 10 Gandalf 1.9 11/5/99 Jesse Glick Context help jumbo
* patch.
* 9 Gandalf 1.8 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 8 Gandalf 1.7 8/10/99 Ian Formanek Generated Serial Version
* UID
* 7 Gandalf 1.6 7/31/99 Ian Formanek Fixed last change
* 6 Gandalf 1.5 7/31/99 Ian Formanek localization pendings
* 5 Gandalf 1.4 7/11/99 Ian Formanek Advanced button is not
* displayed
* 4 Gandalf 1.3 6/9/99 Ian Formanek ---- Package Change To
* org.openide ----
* 3 Gandalf 1.2 6/1/99 Ian Formanek Fixed removed event
* handlers
* 2 Gandalf 1.1 5/31/99 Ian Formanek Updated to X2 form
* format
* 1 Gandalf 1.0 5/13/99 Ian Formanek
* $
*/